#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtWidgets>
#include <QAction>
#include <QString>
#include <QStringList>
#include <QMenu>
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QToolButton>
#include <QMessageBox>
#include <QDockWidget>
#include <QWebView>
#include <QTabWidget>
#include <QSqlQuery>
#include <QSqlError>
#include <QMessageBox>
#include <QDebug>
#include <QSound>
#include <QDate>
#include <QTime>
#include <QDir>
#include <QFileSystemModel>
#include <QFileDialog>
#include <QProcess>
#include <QSplashScreen>
#include <QTimer>
#include <QProgressBar>
#include <QKeyEvent>
#include <QKeySequence>
#include <QShortcut>

#include "CustomToolbar.h"
#include "Browser.h"
#include "ClientModule.h"
#include "NewClient.h"
#include "EditClient.h"
#include "DomainModule.h"
#include "AutoAdminModule.h"
#include "ExpirationNICModule.h"
#include "MovimientosModule.h"
#include "GastoMensualModule.h"
#include "CuentaCorrienteModule.h"
#include "PagoMensualModule.h"
#include "CobroMensualModule.h"
#include "Splash.h"
#include "AccesosRapidos.h"

class MainWindows : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindows(QWidget *parent = 0);
    MainWindows(QWidget *parent, QString user_, QString host_, int port_);

signals:

public slots:
    void About();
    void ExitApp();

    void CloseTab(int index);

    void OpenClientModule();
    void OpenDomainsModule();
    void OpenAutoAdminmodule();
//    void OpenExpirationModule();
    //
    void OpenMovimientosModule();
    void OpenChequesModule();
    void OpenCuentaCorrienteModule();
    void OpenaGastoMensualModule();
    void OpenCobroMensualModule();
//    void OpenPagoMensualModule();
    //
    void CloseAndBackupModule();

    void SelectExpiratedDomains2();
    void CloseAndBackup();
    void BackupDB();
    void RestoreDB();
    void DropTables();
    void ShorcutsList();
//    void Help();

private:

    bool clientModuleBool;
    bool domainModuleBool;
//    bool expirationNICModuleBool;
    bool autoAdminModuleBool;
    bool cobroMensualBool;
    bool gastoMensualBool;
    bool chequesModuleBool;
//    bool PagoMensualModuleBool;

    int clientModuleIndex;
    int domainModuleIndex;
//    int expirationNICModuleIndex;
    int autoAdminModuleIndex;
    int cobroMensualModuleIndex;
    int gastoMensualModuleIndex;
    int chequesModuleIndex;
//    int PagoMensualModuleIndex;

    QSqlQuery *query;
    /**
     * @brief file_menu Opciones correspondientes al menu Archivo.
     */
    QMenu *file_menu;

    QAction *exit_action;
    QAction *backupDB_action;
    QAction *restoreDB_action;
    QAction *listaShorcuts_action;
    QAction *acercaDe_action;

    /**
     * @brief edit_menu Opciones correspondientes al menu Editar.
     */
    QMenu *ayuda_menu;

    /**
     * @brief view_menu Opciones correspondientes al menu Ver.
     */
    QMenu *view_menu;

    /**
     * @brief client_menu Opciones correspondientes al menu Cliente.
     */
    QMenu *client_menu;

    QMenu *dominios_menu;
    QMenu *movimintos_menu;

//    QMenu *help_menu;

    /**
    * Barra de herramientas situada en la parte izquierda, que contiene
    * las opciones necesarias para acceder a los diferentes módulos.
    */
    CustomToolbar *main_options_toolbar;
    CustomToolbar *a;

    QAction *main_client_action;
    QAction *main_domain_action;
    QAction *main_autoadmin_action;
//    QAction *main_expirationNIC_action;
    //
    QAction *main_movimientos_action;
    QAction *main_cheques_action;
    QAction *main_cuentaCorriente_action;
    QAction *main_gastoMensual_action;
    QAction *main_cobroMensual_action;
//    QAction *main_pagoMensual_action;
    //
//    QAction *main_help_action;
    //
    QAction * main_close_action;

    void CreateMainActions();

    //------------------------------------------------------

    QDockWidget *central_dock;

    // ------------------ Pagina web central --------------
    QWebView *view;
    Browser *browser;
//    QTabWidget *tab;

    QStatusBar *status;

    void CreateMainMenu();
    void CreateActions();

    QString user,host;
    int port;
};

#endif // MAINWINDOW_H
